﻿using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Drawing;
using System.Data;
using System.Linq;
using System.Text;
using System.Windows.Forms;
using SWBetongXaydung.GUI.Common;
using SWBetongXaydung.BLL;
using SWBetongXaydung.GUI.Utils;
using SWBetongXaydung.DAL;
using SWBetongXaydung.Utils;
namespace SWBetongXaydung.GUI.TacNghiep
{
    public partial class UCCapNhienLieu : BaseUserControl
    {
        bool allowUpdate = false;
        bool isAddNew = false;
        BETONGXAYDUNGEntities _dbContext = null;
        void InitDatagrid()
        {
            dgBangNhanNhienLieu.AutoGenerateColumns = false;
            colSoXe.DataPropertyName = "SoXe";
            colTaiXe.DataPropertyName = "TenDayDu";
            colNgayNhan.DataPropertyName = "NgayNhan";
            dgBangNhanNhienLieu.Columns["colNgayNhan"].DefaultCellStyle.Format = "dd/MM/yyyy";
            colNhienLieuNhan.DataPropertyName = "LuongNhienLieu";
        }

        void InitInterface()
        {
            cmbSoXe.Enabled = cmbTaiXe.Enabled = false;
            dtNgayNhan.Enabled = nNhienLieuNhan.Enabled = false;
            dgBangNhanNhienLieu.Enabled = true;
            btnThem.Enabled = true;
            btnRutGon.Enabled = btnHieuChinh.Enabled = false;
            btnBoQua.Visible = btnLuu.Enabled = btnXoa.Enabled = false;
            chkLoc.Enabled = true;
            if (chkLoc.Checked)
                cmbThang.Enabled = cmbNam.Enabled = true;
            else
                cmbThang.Enabled = cmbNam.Enabled = false;
            var current = bdNhanNhienLieu.Current as NhanNhienLieu;
            if (current != null)
                btnRutGon.Enabled = btnThem.Enabled = btnHieuChinh.Enabled = btnXoa.Enabled = true;
            btnThem.Focus();
        }

        public BETONGXAYDUNGEntities DBContext
        {
            get
            {
                return null;
                if (_dbContext == null)
                    _dbContext = DBContextHelper.GetContext();
                return _dbContext;
            }
        }

        public UCCapNhienLieu()
        {
            InitializeComponent();
            InitDatagrid();
            cmbNam.Text = DateTime.Now.Year.ToString();
            cmbThang.Text = DateTime.Now.Month.ToString();
            chkLoc.Checked = true;
            LoadXe();
            LoadTaiXe();
            LoadGrid();
            InitInterface();
        }


        void LoadXe()
        {
            cmbSoXe.DataSource = XeBLL.GetList(DBContext);
            cmbSoXe.DisplayMember = "SoXe";
            cmbSoXe.ValueMember = "SoXe";
        }

        void LoadTaiXe()
        {
            cmbTaiXe.DataSource = TaiXeBLL.GetList(DBContext);
            cmbTaiXe.DisplayMember = "TenDayDu";
            cmbTaiXe.ValueMember = "IDTaiXe";
        }

        void LoadGrid()
        {
            allowUpdate = false;
            bdNhanNhienLieu.DataSource = null;
            if (chkLoc.Checked)
            {
                var list = NhanNhienLieuBLL.GetList(int.Parse(cmbThang.Text), int.Parse(cmbNam.Text), DBContext);
                bdNhanNhienLieu.DataSource = list;
                if (list != null && list.Count > 0)
                    lbSoBanGhi.Text = list.Count.ToString();
            }
            else
            {
                var list = NhanNhienLieuBLL.GetList(0, 0, DBContext);
                bdNhanNhienLieu.DataSource = list;
                if (list != null && list.Count > 0)
                    lbSoBanGhi.Text = list.Count.ToString();
            }
            dgBangNhanNhienLieu.DataSource = bdNhanNhienLieu;
            allowUpdate = true;
        }

        private void btnThem_Click(object sender, EventArgs e)
        {
            InitModeAddOrEdit(true);
        }

        void InitModeAddOrEdit(bool isAdd = true)
        {
            cmbSoXe.Enabled = cmbTaiXe.Enabled = true;
            dtNgayNhan.Enabled = nNhienLieuNhan.Enabled = true;
            btnBoQua.Visible = true;
            btnThem.Enabled = btnHieuChinh.Enabled = false;
            btnLuu.Enabled = btnBoQua.Enabled = true;
            btnXoa.Enabled = false;
            chkLoc.Enabled = false;
            cmbNam.Enabled = cmbThang.Enabled = false;
            dgBangNhanNhienLieu.Enabled = false;
            isAddNew = isAdd;
            cmbSoXe.Focus();
        }

        private void btnHieuChinh_Click(object sender, EventArgs e)
        {
            InitModeAddOrEdit(false);
        }

        bool ValidateData()
        {
            errorNotify.Clear();
            if (cmbSoXe.SelectedIndex == -1)
            {
                errorNotify.SetError(cmbSoXe, "Bạn chưa chọn xe");
                cmbSoXe.Focus();
                return false;
            }
            if (cmbTaiXe.SelectedIndex == -1)
            {
                errorNotify.SetError(cmbTaiXe, "Bạn chưa chọn tài xế");
                cmbTaiXe.Focus();
                return false;
            }
            return true;
        }

        private void btnLuu_Click(object sender, EventArgs e)
        {
            bool isSuccess = false;
            if (ValidateData())
            {
                if (isAddNew)
                {
                    //Thêm
                    NhanNhienLieu nNL = new NhanNhienLieu();
                    nNL.IDTaiXe = int.Parse(cmbTaiXe.SelectedValue.ToString());
                    nNL.SoXe = cmbSoXe.SelectedValue.ToString();
                    nNL.LuongNhienLieu = nNhienLieuNhan.Value;
                    nNL.NgayNhan = dtNgayNhan.Value.Date;
                    var rs = NhanNhienLieuBLL.Add(nNL, DBContext);
                    if (rs == CODE_RESULT_RETURN.ThatBai)
                        DialogUtils.ShowError("Thêm mới thất bại");
                    else
                        isSuccess = true;
                }
                else
                {
                    //Cập nhật
                    var current = bdNhanNhienLieu.Current as NhanNhienLieu;
                    if (current != null)
                    {
                        NhanNhienLieu nNL = new NhanNhienLieu();
                        nNL.IDNhanNhienLieu = current.IDNhanNhienLieu;
                        nNL.IDTaiXe = int.Parse(cmbTaiXe.SelectedValue.ToString());
                        nNL.SoXe = cmbSoXe.SelectedValue.ToString();
                        nNL.LuongNhienLieu = nNhienLieuNhan.Value;
                        nNL.NgayNhan = dtNgayNhan.Value.Date;
                        var rs = NhanNhienLieuBLL.Update(nNL, DBContext);
                        if (rs == CODE_RESULT_RETURN.ThatBai)
                            DialogUtils.ShowError("Cập nhật thất bại");
                        else
                            isSuccess = true;
                    }
                }
                if (isSuccess)
                {
                    if (_dbContext != null)
                        _dbContext = null;
                    LoadGrid();
                    InitInterface();
                }
            }
        }

        private void btnBoQua_Click(object sender, EventArgs e)
        {
            InitInterface();
        }

        private void chkLoc_CheckedChanged(object sender, EventArgs e)
        {
            if (chkLoc.Checked)
            {
                allowUpdate = false;
                if (cmbThang.Text.IsNullOrEmpty())
                    cmbThang.Text = DateTime.Now.Date.Month.ToString();
                if (cmbNam.Text.IsNullOrEmpty())
                    cmbNam.Text = DateTime.Now.Year.ToString();
                cmbThang.Enabled = cmbNam.Enabled = true;
                allowUpdate = true;
                LoadGrid();
            }
            else
            {
                cmbThang.Enabled = cmbNam.Enabled = false;
                LoadGrid();
            }
        }

        private void bdNhanNhienLieu_CurrentChanged(object sender, EventArgs e)
        {
            if (allowUpdate)
            {
                var current = bdNhanNhienLieu.Current as NhanNhienLieu;
                if (current != null)
                {
                    btnRutGon.Enabled = true;
                    btnXoa.Enabled = true;
                    btnHieuChinh.Enabled = true;
                    cmbSoXe.SelectedValue = current.SoXe;
                    cmbSoXe_SelectedIndexChanged(this, null);
                    cmbTaiXe.SelectedValue = current.IDTaiXe;
                    nNhienLieuNhan.Value = (decimal)current.LuongNhienLieu;
                    dtNgayNhan.Value = current.NgayNhan;
                }
                else
                {
                    btnRutGon.Enabled = false;
                    btnXoa.Enabled = false;
                    btnHieuChinh.Enabled = false;
                }
            }
        }

        private void dgBangNhanNhienLieu_CellContentClick(object sender, DataGridViewCellEventArgs e)
        {
            if (e.ColumnIndex == 4)
            {
                var current = bdNhanNhienLieu.Current as NhanNhienLieu;
                if (current != null)
                {
                    FormDoiTaiXe frm = new FormDoiTaiXe(current.SoXe);
                    if (frm.ShowDialog() == DialogResult.OK)
                    {
                        current.IDTaiXe = (int)frm.IDTaiXe;
                        NhanNhienLieu nNL = new NhanNhienLieu();
                        nNL.IDTaiXe = current.IDTaiXe;
                        nNL.IDNhanNhienLieu = current.IDNhanNhienLieu;
                        nNL.SoXe = current.SoXe;
                        nNL.LuongNhienLieu = current.LuongNhienLieu;
                        nNL.NgayNhan = current.NgayNhan;
                        var rs = NhanNhienLieuBLL.Update(nNL);
                        if (rs == CODE_RESULT_RETURN.ThatBai)
                            DialogUtils.ShowError("Cập nhật thất bại");
                        dgBangNhanNhienLieu.Refresh();
                        frm.Dispose();
                    }
                }
            }
        }

        private void btnXoa_Click(object sender, EventArgs e)
        {
            if (DialogUtils.ShowYesNo("Bạn có chắc là muốn xóa") == DialogResult.Yes)
            {
                var current = bdNhanNhienLieu.Current as NhanNhienLieu;
                if (current != null)
                {
                    var rs = NhanNhienLieuBLL.Delete((int)current.IDNhanNhienLieu, DBContext);
                    if (rs == CODE_RESULT_RETURN.ThatBai)
                        DialogUtils.ShowError("Xóa thất bại");
                    else
                    {
                        if (_dbContext != null)
                            _dbContext = null;
                        bdNhanNhienLieu.RemoveCurrent();
                    }

                }
            }
        }

        private void cmbSoXe_SelectedIndexChanged(object sender, EventArgs e)
        {
            if (allowUpdate)
            {
                var pc = PhanCongLaiXeBLL.Get(cmbSoXe.SelectedValue.ToString());
                if (pc != null)
                    cmbTaiXe.SelectedValue = pc.IDTaiXe;
            }
        }

        private void cmbThang_SelectedIndexChanged(object sender, EventArgs e)
        {
            if (allowUpdate)
                LoadGrid();
        }

        private void cmbNam_Validating(object sender, CancelEventArgs e)
        {
            int o = 0;
            if (!int.TryParse(((ComboBox)sender).Text, out o))
            {
                e.Cancel = true;
                DialogUtils.ShowError("Vui lòng nhập năm đúng");
            }
        }

        private void cmbThang_Validating(object sender, CancelEventArgs e)
        {
            int o = 0;
            if (!int.TryParse(((ComboBox)sender).Text, out o))
            {
                e.Cancel = true;
                DialogUtils.ShowError("Vui lòng nhập tháng đúng");
            }
        }

        private void nNhienLieuNhan_KeyPress(object sender, KeyPressEventArgs e)
        {
            if (e.KeyChar == (char)Keys.Enter)
                btnLuu.PerformClick();
        }

        private void UCCapNhienLieu_ControlRemoved(object sender, ControlEventArgs e)
        {
            if (_dbContext != null)
                _dbContext.Dispose();
        }

        private void btnRutGon_Click(object sender, EventArgs e)
        {
            var current = bdNhanNhienLieu.Current as NhanNhienLieu;
            if (current != null)
            {
                current.TinhTrang = 1;
                var rs = NhanNhienLieuBLL.Update(current, DBContext);
                if (rs == CODE_RESULT_RETURN.ThanhCong)
                {
                    DialogUtils.ShowMessage("Rút gọn thành công");
                    dgBangNhanNhienLieu.Refresh();
                }
                else
                    DialogUtils.ShowError("Rút gọn thất bại");
            }
        }

    }
}
